Struktur Dasar Module di Move-Sui Part II
Kamu sudah mempelajari dua komponen utama struktur module di Sui. Sekarang kita lanjut menggali elemen lain yang membuat sebuah module Sui lengkap dan aman.
Object di Sui Move
Di pelajaran ini kita kenalan singkat dulu dengan Object di Move-Sui; detail lebih dalam akan dibahas di pelajaran selanjutnya. Dalam Move-Sui, object menyimpan informasi penting terkait module—misalnya alamat akunmu, saldo saat ini, atau jumlah yang ingin ditransfer.
Kita membuat object dengan keyword struct, tetapi ada perbedaan: berbeda dari bahasa seperti Go yang cukup mendefinisikan struct, di Move-Sui kita harus menambahkan ability key agar struct tersebut menjadi sebuah Sui Move object. Strukturnya:
struct StructName has key {
// isi struct di sini
}
Setiap module dan struct yang menjadi object di Move-Sui perlu memiliki ID yang mengidentifikasi alamat akun penciptanya. Contohnya:
use sui::object::UID;
struct StructName has key {
id: UID,
// field lain
}
Tenang—kita akan bahas object lebih dalam nanti; sekarang fokus dulu pada struktur dasar module.
Constructor di Move-Sui (Initializer Module)
Di Move-Sui, constructor dipanggil saat module dipublish—artinya hanya sekali seumur hidup module. Fungsi constructor membantu menjalankan logika sekali jalan: menetapkan aturan keamanan, memastikan hanya kreator yang boleh memiliki atau memodifikasi object tertentu, menginisialisasi object dengan alamat yang tepat, dsb. Syarat-syaratnya:
- Nama fungsinya harus
init. - Argumen terakhir harus salah satu dari:
&TxContext&mut TxContext
- Tidak boleh punya nilai return.
- Boleh punya parameter lain (opsional) seperti object atau variabel tipe apa pun.
Struktur dasarnya:
fun init(optional_parameter: anyDataType, ctx: &mut TxContext) {
// kode init di sini
}
Contoh implementasi:
module examples::init {
use sui::transfer;
use sui::object::{Self, UID};
use sui::tx_context::{Self, TxContext};
// Mendefinisikan ExampleObject
struct ExampleObject has key {
id: UID
}
// init hanya dipanggil sekali saat module dipublish
// Di sini kita membatasi agar hanya owner yang bisa memiliki object
fun init(ctx: &mut TxContext) {
transfer::transfer(ExampleObject {
id: object::new(ctx),
}, tx_context::sender(ctx))
}
}
Pada contoh di atas, init menerima parameter (ctx: &mut TxContext) dan memakai transfer::transfer() untuk memindahkan kepemilikan object ke alamat pengirim. Jika masih bingung, tidak masalah—operasi transfer dan kepemilikan object akan kita bahas mendalam nanti.
Catatan: init tidak wajib ada di suatu module. Kamu bisa membuat fungsi lain yang berperan seperti constructor jika perlu mengembalikan nilai.
Struktur dasar lengkap sebuah Kontrak Move-Sui
Kita sudah menyinggung komponen penting sebuah kontrak. Ini belum semuanya, tetapi cukup sebagai fondasi. Berikut gambaran lengkap struktur dasarnya:
module package_name::module_name {
use sui::object::UID;
struct StructName has key {
id: UID,
// isi struct
}
fun init() {
// kode constructor
}
// kode module lainnya
}
Hal esensial lain yang perlu dipelajari
Seperti bahasa pemrograman lain, kita perlu memahami cara menulis dan bekerja dengan aspek-aspek berikut:
- Variabel
- Control flow
- Ekspresi & operasi
- Fungsi
- Konsep lanjutan object
- Dan lainnya
Di pelajaran berikutnya semua poin ini akan kita uraikan.
Penutup
Sekarang kamu sudah tahu bentuk dasar struktur kontrak di Move-Sui. Selanjutnya kita masuk ke dasar bahasa: variabel, tipe data, control flow, dan operasi yang bisa kita lakukan.